using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._NetworkAnalystTools._Analysis
{
    /// <summary>
    /// <para>Make Location-Allocation Analysis Layer</para>
    /// <para>Makes a location-allocation network analysis layer and sets its analysis properties. A location-allocation analysis layer is useful for choosing a given number of facilities from a set of potential locations such that a demand will be allocated to facilities in an optimal and efficient manner. The layer can be created using a local network dataset or using a service hosted online or in a portal.</para>
    /// <para>创建位置分配网络分析图层并设置其分析属性。位置分配分析图层可用于从一组潜在位置中选择给定数量的设施点，以便以最佳和高效的方式将需求分配给设施点。可以使用本地网络数据集或使用在线或门户中托管的服务创建图层。</para>
    /// </summary>    
    [DisplayName("Make Location-Allocation Analysis Layer")]
    public class MakeLocationAllocationAnalysisLayer : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public MakeLocationAllocationAnalysisLayer()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_network_data_source">
        /// <para>Network Data Source</para>
        /// <para>The network dataset or service on which the network analysis will be performed. Use the portal URL for a service.</para>
        /// <para>将对其执行网络分析的网络数据集或服务。使用服务的门户 URL。</para>
        /// </param>
        public MakeLocationAllocationAnalysisLayer(object _network_data_source)
        {
            this._network_data_source = _network_data_source;
        }
        public override string ToolboxName => "Network Analyst Tools";

        public override string ToolName => "Make Location-Allocation Analysis Layer";

        public override string CallName => "na.MakeLocationAllocationAnalysisLayer";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_network_data_source, _layer_name, _travel_mode, _travel_direction.GetGPValue(), _problem_type.GetGPValue(), _cutoff, _number_of_facilities_to_find, _decay_function_type.GetGPValue(), _decay_function_parameter_value, _target_market_share, _capacity, _time_of_day, _time_zone.GetGPValue(), _line_shape.GetGPValue(), _accumulate_attributes, _out_network_analysis_layer];

        /// <summary>
        /// <para>Network Data Source</para>
        /// <para>The network dataset or service on which the network analysis will be performed. Use the portal URL for a service.</para>
        /// <para>将对其执行网络分析的网络数据集或服务。使用服务的门户 URL。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Network Data Source")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _network_data_source { get; set; }


        /// <summary>
        /// <para>Layer Name</para>
        /// <para>The name of the network analysis layer to create.</para>
        /// <para>要创建的网络分析图层的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Layer Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _layer_name { get; set; } = null;


        /// <summary>
        /// <para>Travel Mode</para>
        /// <para><xdoc>
        ///   <para>The name of the travel mode to use in the analysis. The travel mode represents a collection of network settings, such as travel restrictions and U-turn policies, that determine how a pedestrian, car, truck, or other medium of transportation moves through the network. Travel modes are defined on your network data source.</para>
        ///   <para>An arcpy.na.TravelMode object and a string containing the valid JSON representation of a travel mode can also be used as input to the parameter.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要在分析中使用的出行模式的名称。出行模式表示一组网络设置，例如出行限制和 U 形转弯策略，这些设置决定了行人、汽车、卡车或其他交通工具在网络中的移动方式。出行模式是在网络数据源上定义的。</para>
        ///   <para>还可以将 arcpy.na.TravelMode 对象和包含出行模式的有效 JSON 表示形式的字符串用作参数的输入。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Travel Mode")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _travel_mode { get; set; } = null;


        /// <summary>
        /// <para>Travel Direction</para>
        /// <para><xdoc>
        ///   <para>Specifies the direction of travel between facilities and demand points when calculating the network costs.</para>
        ///   <bulletList>
        ///     <bullet_item>Away from facilities—Direction of travel is from facilities to demand points. This is the default. Fire departments commonly use this setting, since they are concerned with the time it takes to travel from the fire station to the location of the emergency.</bullet_item><para/>
        ///     <bullet_item>Toward facilities—Direction of travel is from demand points to facilities. Retail stores commonly use this setting, since they are concerned with the time it takes the shoppers to reach the store.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>Using this option can affect the allocation of the demand points to the facilities on a network with one-way restrictions and different impedances based on direction of travel. For instance, it may take 15 minutes to drive from the demand point to the facility but only 10 minutes when driving from the facility to the demand point.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>在计算网络成本时指定设施点和需求点之间的行进方向。</para>
        ///   <bulletList>
        ///     <bullet_item>远离设施点 - 行进方向是从设施点到需求点。这是默认设置。消防部门通常使用此设置，因为他们关心从消防局到紧急情况发生地点所需的时间。</bullet_item><para/>
        ///     <bullet_item>朝向设施点 - 行进方向是从需求点到设施点。零售商店通常使用此设置，因为他们关心购物者到达商店所需的时间。</bullet_item><para/>
        ///   </bulletList>
        ///   <para>使用此选项可能会影响将需求点分配给网络上具有单向限制和基于行进方向的不同阻抗的设施点。例如，从需求点开车到工厂可能需要 15 分钟，但从工厂开车到需求点只需 10 分钟。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Travel Direction")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _travel_direction_value _travel_direction { get; set; } = _travel_direction_value._FROM_FACILITIES;

        public enum _travel_direction_value
        {
            /// <summary>
            /// <para>Toward facilities</para>
            /// <para>Toward facilities—Direction of travel is from demand points to facilities. Retail stores commonly use this setting, since they are concerned with the time it takes the shoppers to reach the store.</para>
            /// <para>朝向设施点 - 行进方向是从需求点到设施点。零售商店通常使用此设置，因为他们关心购物者到达商店所需的时间。</para>
            /// </summary>
            [Description("Toward facilities")]
            [GPEnumValue("TO_FACILITIES")]
            _TO_FACILITIES,

            /// <summary>
            /// <para>Away from facilities</para>
            /// <para>Away from facilities—Direction of travel is from facilities to demand points. This is the default. Fire departments commonly use this setting, since they are concerned with the time it takes to travel from the fire station to the location of the emergency.</para>
            /// <para>远离设施点 - 行进方向是从设施点到需求点。这是默认设置。消防部门通常使用此设置，因为他们关心从消防局到紧急情况发生地点所需的时间。</para>
            /// </summary>
            [Description("Away from facilities")]
            [GPEnumValue("FROM_FACILITIES")]
            _FROM_FACILITIES,

        }

        /// <summary>
        /// <para>Problem Type</para>
        /// <para><xdoc>
        ///   <para>The problem type that will be solved. The choice of the problem type depends on the kind of facility being located. Different kinds of facilities have different priorities and constraints.</para>
        ///   <bulletList>
        ///     <bullet_item>Minimize impedance—This option solves the warehouse location problem. It selects a set of facilities such that the total sum of weighted impedances (demand at a location times the impedance to the closest facility) is minimized. This problem type is often known as the P-Median problem. This is the default problem type.</bullet_item><para/>
        ///     <bullet_item>Maximize coverage—This option solves the fire station location problem. It chooses facilities such that all or the greatest amount of demand is within a specified impedance cutoff.</bullet_item><para/>
        ///     <bullet_item>Maximize capacitated coverage—This option solves the location problem where facilities have a finite capacity. It chooses facilities such that all or the greatest amount of demand can be served without exceeding the capacity of any facility. In addition to honoring capacity, it selects facilities such that the total sum of weighted impedance (demand allocated to a facility multiplied by the impedance to or from the facility) is minimized.</bullet_item><para/>
        ///     <bullet_item>Minimize facilities—This option solves the fire station location problem. It chooses the minimum number of facilities needed to cover all or the greatest amount of demand within a specified impedance cutoff.</bullet_item><para/>
        ///     <bullet_item>Maximize attendance—This option solves the neighborhood store location problem where the proportion of demand allocated to the nearest chosen facility falls with increasing distance. The set of facilities that maximize the total allocated demand is chosen. Demand further than the specified impedance cutoff does not affect the chosen set of facilities.</bullet_item><para/>
        ///     <bullet_item>Maximize market share—This option solves the competitive facility location problem. It chooses facilities to maximize market share in the presence of competitive facilities. Gravity model concepts are used to determine the proportion of demand allocated to each facility. The set of facilities that maximizes the total allocated demand is chosen.</bullet_item><para/>
        ///     <bullet_item>Target market share—This option solves the competitive facility location problem. It chooses facilities to reach a specified target market share in the presence of competitive facilities. Gravity model concepts are used to determine the proportion of demand allocated to each facility. The minimum number of facilities needed to reach the specified target market share is chosen.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将要解决的问题类型。问题类型的选择取决于所定位的设施类型。不同类型的设施有不同的优先事项和限制。</para>
        ///   <bulletList>
        ///     <bullet_item>最小化阻抗 （Minimize impedance） - 此选项可解决仓库位置问题。它选择一组设施，使加权阻抗的总和（某个位置的需求乘以最近设施的阻抗）最小化。此问题类型通常称为 P-中位数问题。这是默认问题类型。</bullet_item><para/>
        ///     <bullet_item>最大化覆盖范围 - 此选项可解决消防站位置问题。它选择的设施使所有或最大需求量都在指定的阻抗截止范围内。</bullet_item><para/>
        ///     <bullet_item>最大化容量覆盖范围 - 此选项可解决设施容量有限的位置问题。它选择的设施可以在不超过任何设施容量的情况下满足所有或最大需求。除了尊重容量外，它还选择设施，使加权阻抗的总和（分配给设施的需求乘以设施的阻抗乘以设施的阻抗）最小化。</bullet_item><para/>
        ///     <bullet_item>最小化设施点 - 此选项可解决消防站位置问题。它选择在指定阻抗截止范围内满足所有或最大需求所需的最小设施数量。</bullet_item><para/>
        ///     <bullet_item>最大化出勤率 - 此选项解决了邻里商店位置问题，即分配给最近所选设施点的需求比例随着距离的增加而下降。选择使总分配需求最大化的设施集。超过指定阻抗截止值的需求不会影响所选的设施组。</bullet_item><para/>
        ///     <bullet_item>最大化市场份额 - 此选项解决了竞争激烈的设施选址问题。它选择的设施是在存在竞争设施的情况下最大限度地提高市场份额。重力模型概念用于确定分配给每个设施的需求比例。选择使总分配需求最大化的设施集。</bullet_item><para/>
        ///     <bullet_item>目标市场份额 - 此选项解决了竞争性设施选址问题。它选择的设施在存在竞争设施的情况下达到指定的目标市场份额。重力模型概念用于确定分配给每个设施的需求比例。选择达到指定目标市场份额所需的最小设施数量。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Problem Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _problem_type_value _problem_type { get; set; } = _problem_type_value._MINIMIZE_IMPEDANCE;

        public enum _problem_type_value
        {
            /// <summary>
            /// <para>Minimize impedance</para>
            /// <para>Minimize impedance—This option solves the warehouse location problem. It selects a set of facilities such that the total sum of weighted impedances (demand at a location times the impedance to the closest facility) is minimized. This problem type is often known as the P-Median problem. This is the default problem type.</para>
            /// <para>最小化阻抗 （Minimize impedance） - 此选项可解决仓库位置问题。它选择一组设施，使加权阻抗的总和（某个位置的需求乘以最近设施的阻抗）最小化。此问题类型通常称为 P-中位数问题。这是默认问题类型。</para>
            /// </summary>
            [Description("Minimize impedance")]
            [GPEnumValue("MINIMIZE_IMPEDANCE")]
            _MINIMIZE_IMPEDANCE,

            /// <summary>
            /// <para>Maximize coverage</para>
            /// <para>Maximize coverage—This option solves the fire station location problem. It chooses facilities such that all or the greatest amount of demand is within a specified impedance cutoff.</para>
            /// <para>最大化覆盖范围 - 此选项可解决消防站位置问题。它选择的设施使所有或最大需求量都在指定的阻抗截止范围内。</para>
            /// </summary>
            [Description("Maximize coverage")]
            [GPEnumValue("MAXIMIZE_COVERAGE")]
            _MAXIMIZE_COVERAGE,

            /// <summary>
            /// <para>Maximize capacitated coverage</para>
            /// <para>Maximize capacitated coverage—This option solves the location problem where facilities have a finite capacity. It chooses facilities such that all or the greatest amount of demand can be served without exceeding the capacity of any facility. In addition to honoring capacity, it selects facilities such that the total sum of weighted impedance (demand allocated to a facility multiplied by the impedance to or from the facility) is minimized.</para>
            /// <para>最大化容量覆盖范围 - 此选项可解决设施容量有限的位置问题。它选择的设施可以在不超过任何设施容量的情况下满足所有或最大需求。除了尊重容量外，它还选择设施，使加权阻抗的总和（分配给设施的需求乘以设施的阻抗乘以设施的阻抗）最小化。</para>
            /// </summary>
            [Description("Maximize capacitated coverage")]
            [GPEnumValue("MAXIMIZE_CAPACITATED_COVERAGE")]
            _MAXIMIZE_CAPACITATED_COVERAGE,

            /// <summary>
            /// <para>Minimize facilities</para>
            /// <para>Minimize facilities—This option solves the fire station location problem. It chooses the minimum number of facilities needed to cover all or the greatest amount of demand within a specified impedance cutoff.</para>
            /// <para>最小化设施点 - 此选项可解决消防站位置问题。它选择在指定阻抗截止范围内满足所有或最大需求所需的最小设施数量。</para>
            /// </summary>
            [Description("Minimize facilities")]
            [GPEnumValue("MINIMIZE_FACILITIES")]
            _MINIMIZE_FACILITIES,

            /// <summary>
            /// <para>Maximize attendance</para>
            /// <para>Maximize attendance—This option solves the neighborhood store location problem where the proportion of demand allocated to the nearest chosen facility falls with increasing distance. The set of facilities that maximize the total allocated demand is chosen. Demand further than the specified impedance cutoff does not affect the chosen set of facilities.</para>
            /// <para>最大化出勤率 - 此选项解决了邻里商店位置问题，即分配给最近所选设施点的需求比例随着距离的增加而下降。选择使总分配需求最大化的设施集。超过指定阻抗截止值的需求不会影响所选的设施组。</para>
            /// </summary>
            [Description("Maximize attendance")]
            [GPEnumValue("MAXIMIZE_ATTENDANCE")]
            _MAXIMIZE_ATTENDANCE,

            /// <summary>
            /// <para>Maximize market share</para>
            /// <para>Maximize market share—This option solves the competitive facility location problem. It chooses facilities to maximize market share in the presence of competitive facilities. Gravity model concepts are used to determine the proportion of demand allocated to each facility. The set of facilities that maximizes the total allocated demand is chosen.</para>
            /// <para>最大化市场份额 - 此选项解决了竞争激烈的设施选址问题。它选择的设施是在存在竞争设施的情况下最大限度地提高市场份额。重力模型概念用于确定分配给每个设施的需求比例。选择使总分配需求最大化的设施集。</para>
            /// </summary>
            [Description("Maximize market share")]
            [GPEnumValue("MAXIMIZE_MARKET_SHARE")]
            _MAXIMIZE_MARKET_SHARE,

            /// <summary>
            /// <para>Target market share</para>
            /// <para>Target market share—This option solves the competitive facility location problem. It chooses facilities to reach a specified target market share in the presence of competitive facilities. Gravity model concepts are used to determine the proportion of demand allocated to each facility. The minimum number of facilities needed to reach the specified target market share is chosen.</para>
            /// <para>目标市场份额 - 此选项解决了竞争性设施选址问题。它选择的设施在存在竞争设施的情况下达到指定的目标市场份额。重力模型概念用于确定分配给每个设施的需求比例。选择达到指定目标市场份额所需的最小设施数量。</para>
            /// </summary>
            [Description("Target market share")]
            [GPEnumValue("TARGET_MARKET_SHARE")]
            _TARGET_MARKET_SHARE,

        }

        /// <summary>
        /// <para>Cutoff</para>
        /// <para><xdoc>
        ///   <para>The maximum impedance at which a demand point can be allocated to a facility in the units of the impedance attribute used by your chosen Travel Mode. The maximum impedance is measured by the least-cost path along the network. If a demand point is outside the cutoff, it is left unallocated. This property might be used to model the maximum distance that people are willing to travel to visit your stores or the maximum time that is permitted for a fire department to reach anyone in the community.</para>
        ///   <para>This cutoff can be overridden on a per-demand-point basis by specifying individual cutoff values in the demand points sublayer in the Cutoff_[Impedance] property. For example, you might find that people in rural areas are willing to travel up to 10 miles to reach a facility while urbanites are only willing to travel up to 2 miles. You can model this behavior by setting the Cutoff value of the analysis layer to 10 and setting the Cutoff_Miles value of each demand point in an urban areas to 2.</para>
        ///   <para>By default, no cutoff is used for the analysis.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>可以将需求点分配给设施点的最大阻抗，以所选出行模式使用的阻抗属性为单位。最大阻抗由网络上的最低成本路径测量。如果需求点在截止点之外，则该需求点将处于未分配状态。此属性可用于模拟人们愿意前往访问您的商店的最大距离，或者消防部门允许接触社区中任何人的最长时间。</para>
        ///   <para>通过在 Cutoff_[Impedance] 属性的需求点子图层中指定单个截止值，可以基于每个需求点覆盖此截止值。例如，您可能会发现农村地区的人们愿意行驶 10 英里才能到达设施，而城市居民只愿意行驶 2 英里。可以通过将分析图层的截止值设置为 10，并将城市区域中每个需求点的Cutoff_Miles值设置为 2 来对此行为进行建模。</para>
        ///   <para>默认情况下，分析不使用截止值。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Cutoff")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _cutoff { get; set; } = null;


        /// <summary>
        /// <para>Number of Facilities to Find</para>
        /// <para><xdoc>
        ///   <para>Specifies the number of facilities that the solver should locate. By default, this parameter is set to 1.</para>
        ///   <para>The facilities with a FacilityType value of Required are always part of the solution when there are more facilities to find than required facilities; any excess facilities to choose are picked from candidate facilities.</para>
        ///   <para>Any facilities that have a FacilityType value of Chosen before solving are treated as candidate facilities at solve time.</para>
        ///   <para>The parameter value is not considered for the Minimize facilities problem type since the solver determines the minimum number of facilities to locate to maximize coverage.</para>
        ///   <para>The parameter value is overridden for the Target market share problem type because the solver searches for the minimum number of facilities required to capture the specified market share.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定求解器应定位的设施点数。默认情况下，此参数设置为 1。</para>
        ///   <para>当要查找的设施点多于所需设施点时，FacilityType 值为 Required 的设施点始终是解决方案的一部分;任何要选择的多余设施都是从候选设施中挑选的。</para>
        ///   <para>在求解前 FacilityType 值为 Chosen 的任何设施点在求解时都被视为候选设施点。</para>
        ///   <para>最小化设施点问题类型不考虑参数值，因为求解器会确定要定位的最小设施点数以最大化覆盖范围。</para>
        ///   <para>对于目标市场份额问题类型，参数值将被覆盖，因为求解器会搜索捕获指定市场份额所需的最小设施点数。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Number of Facilities to Find")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _number_of_facilities_to_find { get; set; } = 1;


        /// <summary>
        /// <para>Decay Function Type</para>
        /// <para><xdoc>
        ///   <para>This sets the equation for transforming the network cost between facilities and demand points. This property, coupled with the Decay Function Parameter Value, specifies how severely the network impedance between facilities and demand points influences the solver's choice of facilities.</para>
        ///   <bulletList>
        ///     <bullet_item>Linear—The transformed network impedance between the facility and the demand point is the same as the shortest-path network impedance between them. With this option, the impedance parameter is always set to 1. This is the default.</bullet_item><para/>
        ///     <bullet_item>Power—The transformed network impedance between the facility and the demand point is equal to the shortest-path network impedance raised to the power specified by the impedance parameter. Use this option with a positive impedance parameter to specify higher weight to nearby facilities.</bullet_item><para/>
        ///     <bullet_item>Exponential—The transformed network impedance between the facility and the demand point is equal to the mathematical constant e raised to the power specified by the shortest-path network impedance multiplied with the impedance parameter. Use this option with a positive impedance parameter to specify a very high weight to nearby facilities.Exponential transformations are commonly used in conjunction with an impedance cutoff.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>Demand points have an ImpedanceTransformation property, which, if set, overrides the Decay Function Parameter Value property of the analysis layer on a per-demand-point basis. You might determine that the decay function should be different for urban and rural residents. You can model this by setting the impedance transformation for the analysis layer to match that of rural residents and setting the impedance transformation for the individual demand points located in urban areas to match that of urbanites.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>这为转换设施和需求点之间的网络成本设定了方程式。此属性与衰减函数参数值相结合，指定了设施点和请求点之间的网络阻抗对求解器设施点选择的影响程度。</para>
        ///   <bulletList>
        ///     <bullet_item>线性 — 设施点和请求点之间的变换网络阻抗与它们之间的最短路径网络阻抗相同。使用此选项时，阻抗参数始终设置为 1。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>功率 — 设施点和请求点之间的变换网络阻抗等于提升到阻抗参数指定的功率的最短路径网络阻抗。将此选项与正阻抗参数一起使用，可为附近设施指定更高的权重。</bullet_item><para/>
        ///     <bullet_item>指数 - 设施点和需求点之间的变换网络阻抗等于数学常数 e 提高到由最短路径网络阻抗乘以阻抗参数指定的功率。将此选项与正阻抗参数一起使用，以指定附近设施的非常高的权重。指数变换通常与阻抗截止结合使用。</bullet_item><para/>
        ///   </bulletList>
        ///   <para>需求点具有 ImpedanceTransformation 属性，如果设置了该属性，则基于每个需求点覆盖分析图层的 Decay Function Parameter Value 属性。您可以确定城乡居民的衰减函数应该不同。您可以通过设置分析图层的阻抗变换以匹配农村居民的阻抗变换，并将位于城市地区的各个需求点的阻抗变换设置为与城市居民的阻抗变换相匹配来对此进行建模。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Decay Function Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _decay_function_type_value _decay_function_type { get; set; } = _decay_function_type_value._LINEAR;

        public enum _decay_function_type_value
        {
            /// <summary>
            /// <para>Linear</para>
            /// <para>Linear—The transformed network impedance between the facility and the demand point is the same as the shortest-path network impedance between them. With this option, the impedance parameter is always set to 1. This is the default.</para>
            /// <para>线性 — 设施点和请求点之间的变换网络阻抗与它们之间的最短路径网络阻抗相同。使用此选项时，阻抗参数始终设置为 1。这是默认设置。</para>
            /// </summary>
            [Description("Linear")]
            [GPEnumValue("LINEAR")]
            _LINEAR,

            /// <summary>
            /// <para>Power</para>
            /// <para>Power—The transformed network impedance between the facility and the demand point is equal to the shortest-path network impedance raised to the power specified by the impedance parameter. Use this option with a positive impedance parameter to specify higher weight to nearby facilities.</para>
            /// <para>功率 — 设施点和请求点之间的变换网络阻抗等于提升到阻抗参数指定的功率的最短路径网络阻抗。将此选项与正阻抗参数一起使用，可为附近设施指定更高的权重。</para>
            /// </summary>
            [Description("Power")]
            [GPEnumValue("POWER")]
            _POWER,

            /// <summary>
            /// <para>Exponential</para>
            /// <para>Exponential—The transformed network impedance between the facility and the demand point is equal to the mathematical constant e raised to the power specified by the shortest-path network impedance multiplied with the impedance parameter. Use this option with a positive impedance parameter to specify a very high weight to nearby facilities.Exponential transformations are commonly used in conjunction with an impedance cutoff.</para>
            /// <para>指数 - 设施点和需求点之间的变换网络阻抗等于数学常数 e 提高到由最短路径网络阻抗乘以阻抗参数指定的功率。将此选项与正阻抗参数一起使用，以指定附近设施的非常高的权重。指数变换通常与阻抗截止结合使用。</para>
            /// </summary>
            [Description("Exponential")]
            [GPEnumValue("EXPONENTIAL")]
            _EXPONENTIAL,

        }

        /// <summary>
        /// <para>Decay Function Parameter Value</para>
        /// <para><xdoc>
        ///   <para>Provides a parameter value to the equations specified in the Decay Function Type parameter. The parameter value is ignored when the decay function is of type Linear. For Power and Exponential decay functions, the value should be nonzero.</para>
        ///   <para>Demand points have an ImpedanceTransformation property, which, if set, overrides the Decay Function Parameter Value property of the analysis layer on a per-demand-point basis. You might determine that the decay function should be different for urban and rural residents. You can model this by setting the impedance transformation for the analysis layer to match that of rural residents and setting the impedance transformation for the individual demand points located in urban areas to match that of urbanites.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>为衰减函数类型参数中指定的方程提供参数值。当衰减函数为 Linear 类型时，将忽略参数值。对于幂函数和指数衰减函数，该值应为非零。</para>
        ///   <para>需求点具有 ImpedanceTransformation 属性，如果设置了该属性，则基于每个需求点覆盖分析图层的 Decay Function Parameter Value 属性。您可以确定城乡居民的衰减函数应该不同。您可以通过设置分析图层的阻抗变换以匹配农村居民的阻抗变换，并将位于城市地区的各个需求点的阻抗变换设置为与城市居民的阻抗变换相匹配来对此进行建模。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Decay Function Parameter Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _decay_function_parameter_value { get; set; } = 1;


        /// <summary>
        /// <para>Target Market Share</para>
        /// <para>Specifies the target market share in percentage to solve for when the Problem Type parameter is set to Target market share. It is the percentage of the total demand weight that you want your solution facilities to capture. The solver chooses the minimum number of facilities required to capture the target market share specified by this numeric value.</para>
        /// <para>指定当“问题类型”参数设置为“目标市场份额”时要求解的目标市场份额（以百分比表示）。它是您希望解决方案设施捕获的总需求权重的百分比。求解器选择捕获此数值指定的目标市场份额所需的最小设施数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Market Share")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _target_market_share { get; set; } = 10;


        /// <summary>
        /// <para>Capacity</para>
        /// <para><xdoc>
        ///   <para>Specifies the default capacity of facilities when the Problem Type parameter is set to Maximize capacitated coverage. This parameter is ignored for all other problem types.</para>
        ///   <para>Facilities have a Capacity property, which, if set to a nonnull value, overrides the Capacity parameter for that facility.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定“问题类型”参数设置为最大化电容覆盖率时设施点的默认容量。对于所有其他问题类型，将忽略此参数。</para>
        ///   <para>设施点具有 Capacity 属性，如果设置为非空值，则该属性将覆盖该设施点的 Capacity 参数。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Capacity")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _capacity { get; set; } = 1;


        /// <summary>
        /// <para>Time of Day</para>
        /// <para><xdoc>
        ///   <para>Indicates the time and date of departure. The departure time can be from facilities or demand points, depending on whether Travel Direction is from demand to facility or facility to demand.</para>
        ///   <para>If you have chosen a traffic-based impedance attribute, the solution will be generated given dynamic traffic conditions at the time of day specified here. A date and time can be specified as 5/14/2012 10:30 AM.</para>
        ///   <para>Instead of using a particular date, a day of the week can be specified using the following dates:
        ///   <bulletList>
        ///     <bullet_item>Today—12/30/1899  </bullet_item><para/>
        ///     <bullet_item>Sunday—12/31/1899  </bullet_item><para/>
        ///     <bullet_item>Monday—1/1/1900  </bullet_item><para/>
        ///     <bullet_item>Tuesday—1/2/1900  </bullet_item><para/>
        ///     <bullet_item>Wednesday—1/3/1900  </bullet_item><para/>
        ///     <bullet_item>Thursday—1/4/1900  </bullet_item><para/>
        ///     <bullet_item>Friday—1/5/1900  </bullet_item><para/>
        ///     <bullet_item>Saturday—1/6/1900  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指示出发的时间和日期。出发时间可以是从设施点出发，具体取决于行进方向是从需求到设施还是从设施到需求。</para>
        ///   <para>如果选择了基于流量的阻抗属性，则将在此处指定的一天中的时间根据动态流量条件生成解决方案。日期和时间可以指定为 2012 年 5 月 14 日上午 10：30。</para>
        /// 可以使用<para>以下日期指定星期几，而不是使用特定日期：
        ///   <bulletList>
        ///     <bullet_item>今天 - 1899 年 12 月 30 日</bullet_item><para/>
        ///     <bullet_item>星期日—1899年12月31日</bullet_item><para/>
        ///     <bullet_item>星期一 - 1/1/1900</bullet_item><para/>
        ///     <bullet_item>星期二 - 1/2/1900</bullet_item><para/>
        ///     <bullet_item>星期三 - 1/3/1900</bullet_item><para/>
        ///     <bullet_item>星期四—1/4/1900</bullet_item><para/>
        ///     <bullet_item>星期五 - 1/5/1900</bullet_item><para/>
        ///     <bullet_item>星期六 - 1/6/1900</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Time of Day")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _time_of_day { get; set; } = null;


        /// <summary>
        /// <para>Time Zone</para>
        /// <para><xdoc>
        ///   <para>The time zone of the Time of Day parameter.</para>
        ///   <bulletList>
        ///     <bullet_item>Local time at locations—The Time of Day parameter refers to the time zone in which the facilities or demand points are located. If Travel Direction is facilities to demand points, this is the time zone of the facilities. If Travel Direction is demand points to facilities, this is the time zone of the demand points. This is the default.</bullet_item><para/>
        ///     <bullet_item>UTC—The Time of Day parameter refers to Coordinated Universal Time (UTC). Choose this option if you want to choose the best location for a specific time, such as now, but aren't certain in which time zone the facilities or demand points will be located.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>时间参数的时区。</para>
        ///   <bulletList>
        ///     <bullet_item>位置的本地时间 - 时间参数是指设施点或请求点所在的时区。如果行进方向是设施点到请求点，则这是设施点的时区。如果“行驶方向”是到设施点的需求点，则这是需求点的时区。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>UTC - 时间参数是指协调世界时 （UTC）。如果要在特定时间（例如现在）选择最佳位置，但不确定设施点或请求点将位于哪个时区，请选择此选项。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Time Zone")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _time_zone_value _time_zone { get; set; } = _time_zone_value._LOCAL_TIME_AT_LOCATIONS;

        public enum _time_zone_value
        {
            /// <summary>
            /// <para>UTC</para>
            /// <para>UTC—The Time of Day parameter refers to Coordinated Universal Time (UTC). Choose this option if you want to choose the best location for a specific time, such as now, but aren't certain in which time zone the facilities or demand points will be located.</para>
            /// <para>UTC - 时间参数是指协调世界时 （UTC）。如果要在特定时间（例如现在）选择最佳位置，但不确定设施点或请求点将位于哪个时区，请选择此选项。</para>
            /// </summary>
            [Description("UTC")]
            [GPEnumValue("UTC")]
            _UTC,

            /// <summary>
            /// <para>Local time at locations</para>
            /// <para>Local time at locations—The Time of Day parameter refers to the time zone in which the facilities or demand points are located. If Travel Direction is facilities to demand points, this is the time zone of the facilities. If Travel Direction is demand points to facilities, this is the time zone of the demand points. This is the default.</para>
            /// <para>位置的本地时间 - 时间参数是指设施点或请求点所在的时区。如果行进方向是设施点到请求点，则这是设施点的时区。如果“行驶方向”是到设施点的需求点，则这是需求点的时区。这是默认设置。</para>
            /// </summary>
            [Description("Local time at locations")]
            [GPEnumValue("LOCAL_TIME_AT_LOCATIONS")]
            _LOCAL_TIME_AT_LOCATIONS,

        }

        /// <summary>
        /// <para>Line Shape</para>
        /// <para><xdoc>
        ///   <bulletList>
        ///     <bullet_item>No lines—No shape will be generated for the output of the analysis. This is useful if you are solving a very large problem and are interested only in solution table and are not interested in visualizing your results in a map.</bullet_item><para/>
        ///     <bullet_item>Straight lines—The output line shapes will be straight lines connecting the solution facilities to their allocated demand points. This is the default.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>No matter which output shape type is chosen, the best route is always determined by the network impedance, never Euclidean distance. This means that only the route shapes are different, not the underlying traversal of the network.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <bulletList>
        ///     <bullet_item>无线 - 不会为分析输出生成任何形状。如果您正在解决一个非常大的问题，并且只对解决方案表感兴趣，并且对在地图中可视化结果不感兴趣，这将非常有用。</bullet_item><para/>
        ///     <bullet_item>直线—输出线形状将是将解决方案设施点连接到其分配的请求点的直线。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        ///   <para>无论选择哪种输出形状类型，最佳路由始终由网络阻抗决定，而不是欧几里得距离。这意味着只有路由形状不同，而网络的基础遍历不同。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Line Shape")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _line_shape_value _line_shape { get; set; } = _line_shape_value._STRAIGHT_LINES;

        public enum _line_shape_value
        {
            /// <summary>
            /// <para>No lines</para>
            /// <para>No lines—No shape will be generated for the output of the analysis. This is useful if you are solving a very large problem and are interested only in solution table and are not interested in visualizing your results in a map.</para>
            /// <para>无线 - 不会为分析输出生成任何形状。如果您正在解决一个非常大的问题，并且只对解决方案表感兴趣，并且对在地图中可视化结果不感兴趣，这将非常有用。</para>
            /// </summary>
            [Description("No lines")]
            [GPEnumValue("NO_LINES")]
            _NO_LINES,

            /// <summary>
            /// <para>Straight lines</para>
            /// <para>Straight lines—The output line shapes will be straight lines connecting the solution facilities to their allocated demand points. This is the default.</para>
            /// <para>直线—输出线形状将是将解决方案设施点连接到其分配的请求点的直线。这是默认设置。</para>
            /// </summary>
            [Description("Straight lines")]
            [GPEnumValue("STRAIGHT_LINES")]
            _STRAIGHT_LINES,

        }

        /// <summary>
        /// <para>Accumulate Attributes</para>
        /// <para><xdoc>
        ///   <para>A list of cost attributes to be accumulated during analysis. These accumulated attributes are for reference only; the solver only uses the cost attribute used by your designated travel mode when solving the analysis.</para>
        ///   <para>For each cost attribute that is accumulated, a Total_[Impedance] property is populated in the network analysis output features.</para>
        ///   <para>This parameter is not available if the network data source is an ArcGIS Online service or the network data source is a service on a version of Portal for ArcGIS that does not support accumulation.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>在分析期间要累积的成本属性列表。这些累积属性仅供参考;求解器在求解分析时仅使用指定出行模式使用的成本属性。</para>
        ///   <para>对于累积的每个成本属性，将在网络分析输出要素中填充一个 Total_[Impedance] 属性。</para>
        ///   <para>如果网络数据源是 ArcGIS Online 服务，或者网络数据源是不支持累积的 Portal for ArcGIS 版本上的服务，则此参数不可用。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Accumulate Attributes")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _accumulate_attributes { get; set; } = null;


        /// <summary>
        /// <para>Network Analyst Layer</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Network Analyst Layer")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_network_analysis_layer { get; set; }


        public MakeLocationAllocationAnalysisLayer SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}